package org.wheel.plugins.toolkit.sql.plugin;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import lombok.Getter;
import org.wheel.plugins.toolkit.sql.helper.ParamBank;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 规则上下文 – 存租户、用户、游标等 + 启用标记
 */
public final class RuleContext {

    @Getter
    private final Map<String, Object> paramMap = MapUtil.newConcurrentHashMap();
    private final Set<String> enabledRules = CollUtil.newHashSet(); // 新增：已启用规则

    /* ========== 业务字段 ========== */
    // TODO 这里需要改造成动态获取，或者外部传入方式
//    public Long getTenantId() {
//        return 1L; // 实际从 ThreadLocal/Security 取
//    }
//    public List<Long> getDeptList() {
//        return CollUtil.newArrayList(10L, 20L);
//    }
//    public Long getLastId() {
//        return 0L; // 游标分页
//    }

    /* ========== 参数管理 ========== */
    public void addParam(String key, Object value) {
//        ParamBank bank = ParamBank.current();
//        if(value instanceof Collection<?> col){
//            col.forEach(item-> {
//                String placeholder = bank.nextParam(item);
//                paramMap.put(placeholder, value);
//            });
//        }else if(value instanceof Map<?,?> map){
//            map.forEach((key1, val) -> {
//                String placeholder = bank.nextParam(val);
//                paramMap.put(placeholder, val);
//            });
//        }else {
//            String placeholder = bank.nextParam(value);
//            paramMap.put(placeholder, value);
//        }
        paramMap.put(key, value);
    }

    /* ========== 规则启用 ========== */
    public void enableRule(String ruleName) {
        enabledRules.add(ruleName);
    }
    public boolean isEnabled(String ruleName) {
        return enabledRules.contains(ruleName);
    }
}